2026-03-10 ein PowerShell-Skript direkt im Windows Explorer

Um ein PowerShell-Skript (oder "Makro") direkt im Windows Explorer auf ausgewählte Dateien anzuwenden, gibt es drei gängige Wege. Der effizienteste Weg für den Alltag ist das "Senden an"-Menü, da es keine tiefen Systemeingriffe erfordert.

Methode 1: Das "Senden an"-Menü (Am einfachsten)

Dies fügt dein Skript dem Rechtsklick-Menü hinzu.

  1. Drücke Win + R, gib shell:sendto ein und bestätige mit Enter.

  2. Klicke mit der rechten Maustaste in den Ordner und wähle Neu > Verknüpfung.

  3. Gib als Speicherort folgendes ein: powershell.exe -NoExit -File "C:\Pfad\Zu\Deinem\Skript.ps1" (Ersetze den Pfad durch den tatsächlichen Ort deines Skripts. -NoExit lässt das Fenster offen, damit du Fehler sehen kannst).

  4. Gib der Verknüpfung einen Namen (z. B. "Mein Makro").

  5. Anwendung: Markiere Dateien im Explorer > Rechtsklick > Senden an > Mein Makro.


Methode 2: Das Kontextmenü (Direkt im Rechtsklick)

Wenn du das Skript direkt unter der ersten Ebene des Rechtsklick-Menüs haben möchtest, musst du die Registry nutzen.

  1. Drücke Win + R, gib regedit ein.

  2. Navigiere zu: HKEY_CLASSES_ROOT\*\shell (Das * steht für alle Dateitypen).

  3. Rechtsklick auf shell > Neu > Schlüssel. Nenne ihn z. B. "PowerShellMakro".

  4. Rechtsklick auf den neuen Schlüssel > Neu > Schlüssel. Nenne diesen zwingend command.

  5. Doppelklick rechts auf (Standard) und gib den Befehl ein: powershell.exe -File "C:\Pfad\DeinSkript.ps1" "%1" Das %1 ist der Platzhalter für die ausgewählte Datei.


Wie dein PowerShell-Skript die Dateien empfängt

Damit dein Skript weiß, welche Dateien du markiert hast, nutzt es die Variable $args. Hier ist ein einfaches Beispiel für dein .ps1-Skript:

PowerShell

# Verarbeitet jede Datei, die übergeben wurde
foreach ($file in $args) {
    Write-Host "Verarbeite Datei: $file"
    # Hier kommt dein eigentlicher Code hin, z.B.:
    # Rename-Item -Path $file -NewName ($file + ".bak")
}
Write-Host "Fertig!"
pause
# Verarbeitet jede Datei, die übergeben wurde
foreach ($file in $args) {
    Write-Host "Verarbeite Datei: $file"
    # Hier kommt dein eigentlicher Code hin, z.B.:
    # Rename-Item -Path $file -NewName ($file + ".bak")
}
Write-Host "Fertig!"
pause

Wichtiger Hinweis zu PowerShell-Berechtigungen

Standardmäßig blockiert Windows das Ausführen von Skripten. Falls dein Makro nicht startet, öffne die PowerShell als Administrator und gib diesen Befehl ein: Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force

Zusammenfassung der Vor- und Nachteile

Methode Schwierigkeit Vorteil
Senden an Leicht Sicher, schnell eingerichtet, keine Registry-Gefahr.
Kontextmenü Mittel Schnellerer Zugriff (weniger Klicks).
PowerShell-Profil Schwer Gut für Experten, aber kein direkter Explorer-Rechtsklick.

In Google Sheets exportieren

Möchtest du, dass ich dir ein spezifisches PowerShell-Skript schreibe, das eine bestimmte Aufgabe mit den markierten Dateien erledigt (z. B. Umbenennen, Verschieben oder Komprimieren)?

Du hast gesagt

ja, ich brauche ein script, das einem dateinamen ab der 10.Stelle den Begriff "Archiv" einfügt!

Gemini hat gesagt

Das ist ein klassischer Anwendungsfall für die String-Manipulation in PowerShell. Damit das Skript robust funktioniert, müssen wir sicherstellen, dass es nur Dateien bearbeitet, die überhaupt lang genug sind (mindestens 10 Zeichen), um Fehler zu vermeiden.

Hier ist das fertige Skript für dein Vorhaben:

Das PowerShell-Skript (Archiv-Makro.ps1)

Kopiere diesen Code in eine Textdatei und speichere sie als Archiv-Makro.ps1 ab:

PowerShell

foreach ($path in $args) {
    # Basisdaten der Datei abrufen
    $file = Get-Item -LiteralPath $path
    
    # Prüfen, ob es eine Datei ist (kein Ordner)
    if ($file -is [System.IO.FileInfo]) {
        $name = $file.BaseName  # Dateiname ohne Endung
        $ext  = $file.Extension # Dateiendung (z.B. .txt)

        # Prüfen, ob der Name lang genug ist (mind. 10 Stellen)
        if ($name.Length -ge 10) {
            # String zerlegen: Von 0 bis 10, dann "Archiv", dann der Rest
            $newName = $name.Insert(10, "Archiv") + $ext
            
            # Pfad für die Umbenennung zusammenbauen
            $newPath = Join-Path -Path $file.DirectoryName -ChildPath $newName
            
            # Umbenennen (ErrorAction SilentlyContinue verhindert Fehler bei Duplikaten)
            Rename-Item -LiteralPath $path -NewName $newName -ErrorAction SilentlyContinue
        }
    }
}
foreach ($path in $args) {
    # Basisdaten der Datei abrufen
    $file = Get-Item -LiteralPath $path
    
    # Prüfen, ob es eine Datei ist (kein Ordner)
    if ($file -is [System.IO.FileInfo]) {
        $name = $file.BaseName  # Dateiname ohne Endung
        $ext  = $file.Extension # Dateiendung (z.B. .txt)

        # Prüfen, ob der Name lang genug ist (mind. 10 Stellen)
        if ($name.Length -ge 10) {
            # String zerlegen: Von 0 bis 10, dann "Archiv", dann der Rest
            $newName = $name.Insert(10, "Archiv") + $ext
            
            # Pfad für die Umbenennung zusammenbauen
            $newPath = Join-Path -Path $file.DirectoryName -ChildPath $newName
            
            # Umbenennen (ErrorAction SilentlyContinue verhindert Fehler bei Duplikaten)
            Rename-Item -LiteralPath $path -NewName $newName -ErrorAction SilentlyContinue
        }
    }
}

So installierst du es für den Explorer (Senden-an Methode)

Da wir das Skript gerade besprochen haben, hier die schnellste Einrichtung:

  1. Drücke Win + R und gib shell:sendto ein.

  2. Rechtsklick im Ordner -> Neu -> Verknüpfung.

  3. Gib folgendes als Ziel ein (Pfade anpassen!): powershell.exe -WindowStyle Hidden -File "C:\DeinPfad\Archiv-Makro.ps1" (Der Zusatz -WindowStyle Hidden sorgt dafür, dass das schwarze Fenster nur ganz kurz aufblitzt).

  4. Nenne die Verknüpfung "Dateinamen archivieren".


Funktionsweise erklärt

Ein kleiner Tipp: Wenn du das Wort "Archiv" lieber mit einem Trennzeichen einfügen willst (z.B. _Archiv_), ändere einfach die Zeile im Skript zu: $newName = $name.Insert(10, "_Archiv_") + $ext

Soll ich das Skript so erweitern, dass es zusätzlich ein Log-File schreibt, damit du später sehen kannst, welche Dateien umbenannt wurden?

Du hast gesagt

ok, danke, hast Du auch noch einscript, das dem dateinamen das erstellungsdatum der datei im iso-format voranstellt?

Gemini hat gesagt

Das lässt sich sehr gut mit dem vorherigen Skript kombinieren. Das ISO-Format für Daten ist meist YYYY-MM-DD, was besonders praktisch ist, da Dateien so im Explorer automatisch chronologisch richtig sortiert werden.

Hier ist das Skript, das das Erstellungsdatum ganz vorne anstellt:

Das PowerShell-Skript (Datum-Voranstellen.ps1)

PowerShell

foreach ($path in $args) {
    # Basisdaten der Datei abrufen
    $file = Get-Item -LiteralPath $path
    
    if ($file -is [System.IO.FileInfo]) {
        # Erstellungsdatum im ISO-Format abrufen (JJJJ-MM-TT)
        $datePrefix = $file.CreationTime.ToString("yyyy-MM-dd")
        
        # Prüfen, ob das Datum bereits vorne steht (verhindert doppeltes Umbenennen)
        if ($file.Name -notlike "$datePrefix*") {
            
            # Neuen Namen generieren: Datum + Unterstrich + alter Name
            $newName = $datePrefix + "_" + $file.Name
            
            # Umbenennen
            Rename-Item -LiteralPath $path -NewName $newName -ErrorAction SilentlyContinue
        }
    }
}
foreach ($path in $args) {
    # Basisdaten der Datei abrufen
    $file = Get-Item -LiteralPath $path
    
    if ($file -is [System.IO.FileInfo]) {
        # Erstellungsdatum im ISO-Format abrufen (JJJJ-MM-TT)
        $datePrefix = $file.CreationTime.ToString("yyyy-MM-dd")
        
        # Prüfen, ob das Datum bereits vorne steht (verhindert doppeltes Umbenennen)
        if ($file.Name -notlike "$datePrefix*") {
            
            # Neuen Namen generieren: Datum + Unterstrich + alter Name
            $newName = $datePrefix + "_" + $file.Name
            
            # Umbenennen
            Rename-Item -LiteralPath $path -NewName $newName -ErrorAction SilentlyContinue
        }
    }
}

Was dieses Skript genau macht:

  1. $file.CreationTime: Greift auf das exakte Datum zu, an dem die Datei erstellt wurde.

  2. .ToString("yyyy-MM-dd"): Formatiert das Datum in das ISO-Format (z. B. 2024-05-20).

    • Möchtest du auch die Uhrzeit dabei haben? Dann nutze: "yyyy-MM-dd_HH-mm".
  3. Sicherheitsabfrage (-notlike): Das Skript prüft, ob der Dateiname bereits mit diesem Datum beginnt. Das verhindert, dass du bei versehentlichem mehrmaligem Ausführen Namen wie 2024-05-20_2024-05-20_Dokument.pdf erhältst.

  4. _ als Trenner: Ich habe einen Unterstrich zwischen Datum und Name eingefügt, damit es lesbar bleibt.


Einrichtung als "Senden an"-Verknüpfung

Wie beim letzten Mal:

  1. Win + R -> shell:sendto.

  2. Neue Verknüpfung erstellen.

  3. Ziel: powershell.exe -WindowStyle Hidden -File "C:\Pfad\Zu\Datum-Voranstellen.ps1".

  4. Name: "Datum voranstellen".

Kleiner Tipp für die Ordnung:

Wenn du beide Skripte oft benutzt, kannst du sie im SendTo-Ordner auch in einen Unterordner schieben (z. B. einen Ordner namens "PowerTools" erstellen). Dann erscheint im Rechtsklick-Menü unter "Senden an" ein Untermenü, und dein Hauptmenü bleibt schön übersichtlich.

Soll ich dir zeigen, wie man das Skript anpasst, falls du statt des Erstellungsdatums lieber das Änderungsdatum (wann die Datei zuletzt bearbeitet wurde) verwenden möchtest?

Melde dich an, um beispielsweise Google-Apps zu verbinden und Bilder zu erstellen

Da Gemini kein Mensch ist und Fehler machen kann, auch bei Informationen über Personen, solltest du die Antworten überprüfen. Datenschutz und GeminiWird in einem neuen Fenster geöffnet